#!/usr/bin/env node

const net = require('net');
const DEFAULT_PORT = 8084;

// 检查端口是否被占用的函数
function checkPortAvailable(port) {
  return new Promise((resolve) => {
    const server = net.createServer();

    // 设置超时
    const timeout = setTimeout(() => {
      server.close();
      resolve(false);
    }, 1000);

    server.on('error', (e) => {
      clearTimeout(timeout);
      if (e.code === 'EADDRINUSE') {
        resolve(false); // 端口被占用
      } else {
        resolve(false); // 其他错误
      }
    });

    server.listen(port, 'localhost', () => {
      clearTimeout(timeout);
      server.close(() => {
        resolve(true); // 端口可用
      });
    });
  });
}

// 主函数
async function main() {
  const port = process.argv[2] || DEFAULT_PORT;

  console.log(`正在检查端口 ${port} 是否可用...`);

  const isAvailable = await checkPortAvailable(port);

  if (!isAvailable) {
    console.error(`\n❌ 错误: 端口 ${port} 已被占用！`);
    console.error('请执行以下操作之一：');
    console.error('1. 更改 vue.config.js 中的端口号');
    console.error('2. 关闭占用端口 ' + port + ' 的服务');
    console.error('3. 在 Windows 上，可以使用以下命令查找占用端口的进程：');
    console.error(`   netstat -ano | findstr :${port}`);
    console.error('4. 然后使用 taskkill /PID <进程ID> /F 关闭进程');
    process.exit(1);
  }

  console.log(`✅ 端口 ${port} 可用，继续启动服务...`);
}

main().catch(error => {
  console.error('端口检查时发生错误:', error);
  process.exit(1);
});